package com.lgd.tools;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

import java.io.*;
import java.util.PropertyResourceBundle;

/**
 * Created by 299174105 on 2017/11/14.
 */
public class FtpClientUtils {
    public static boolean uploadFile(
            /*String url,//FTP服务器hostname
            int port,//FTP服务器端口
            String username, // FTP登录账号
            String password, //FTP登录密码
            String path, //FTP服务器保存目录
            String filename, //上传到FTP服务器上的文件名*/
            InputStream input // 输入流
    ) {
        PropertyResourceBundle prb = (PropertyResourceBundle) PropertyResourceBundle
                .getBundle("ftp");
        String url = prb.getString("ip");
        int port = Integer.parseInt(prb.getString("port"));
        String path = prb.getString("path");
        String fileName = prb.getString("fileName");
        String username = prb.getString("user");
        String password = prb.getString("password");
        boolean success = false;
        FTPClient ftp = new FTPClient();
        try {
            int reply;
            ftp.connect(url, port);//连接FTP服务器
            //如果采用默认端口，可以使用ftp.connect(url)的方式直接连接FTP服务器
            ftp.login(username, password);//登录
            reply = ftp.getReplyCode();
            //主动模式
            ftp.enterLocalActiveMode();
            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                System.out.println("FTP服务器 拒绝连接");
                return success;
            }
            ftp.changeWorkingDirectory(path);
            ftp.storeFile(fileName, input);

            input.close();
            ftp.logout();
            success = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return success;
    }

    /**
     * 删除文件
     * @param fileName 要删除的文件地址
     * @return true/false
     * @throws IOException
     */
    public static boolean delete(String fileName, FTPClient ftpClient) throws IOException {
        return ftpClient.deleteFile(fileName);
    }


    /**
     * 下载文件到指定目录
     * @param ftpFile 文件服务器上的文件地址
     * @param dstFile 输出文件的路径和名称
     * @throws Exception
     */
    public static void downLoad(String ftpFile, String dstFile, FTPClient ftpClient) throws Exception {
        if (StringUtils.isBlank(ftpFile)) {
            throw new RuntimeException("ftpFile为空");
        }
        if (StringUtils.isBlank(dstFile)) {
            throw new RuntimeException("dstFile为空");
        }
        File file = new File(dstFile);
        FileOutputStream fos = new FileOutputStream(file);
        ftpClient.retrieveFile(ftpFile, fos);
        fos.flush();
        fos.close();
    }

    /**
     * 从文件服务器获取文件流
     * @param ftpFile 文件服务器上的文件地址
     * @return {@link InputStream}
     * @throws IOException
     */
    public static InputStream retrieveFileStream(String ftpFile, FTPClient ftpClient) throws IOException {
        if (StringUtils.isBlank(ftpFile)) {
            throw new RuntimeException("ftpFile为空");
        }
        return ftpClient.retrieveFileStream(ftpFile);
    }

    public static void main(String[] args) {

        try {
            FileOutputStream fos = new FileOutputStream("send.txt");
            OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
            for (int i = 0; i <3 ; i++) {
                osw.write(i+":");
            }
            File file = new File("send.txt");
            if(file.exists() && file.length() == 0) {
                System.out.println("文件为空！");
            }
            osw.flush();
            fos.close();
            osw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

       /* try {
            FileWriter writer = new FileWriter("send.txt", true);
            for (int i = 0; i < 3; i++) {
                writer.write(i+":"+i);
            }
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }*/
      /*  try {
            FileInputStream in=new FileInputStream(new File("send.txt"));
            boolean flag = uploadFile("192.168.56.101", 21, "ftp1", "299174105", "/home/ftp", "send.txt", in);
            System.out.println(flag);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }*/
        /*try {
            // 打开一个写文件器，构造函数中的第二个参数true表示以追加形式写文件
            FileWriter writer = new FileWriter("./test.txt", true);
            for (int i = 0; i < 3; i++) {
                writer.write(":"+i);
            }
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }*/

    }
}

